<?php
/**
 * Speicherung von Variablen und Arrays.
 * Komplementaerklasse zu Exchange
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_MVC_Variable
{
    /** @var : Array aller Variable. array("name1"=>$val1, "name2"=>$val2, "name3"=>$val3) */
    private $arrVar = array();


    function __construct ()
    {

    }


	/**
	 * Leitet den Zugriff auf {add()} weiter
	 * return Object|NULL
	 * */
    public function __set ($dataName, $data)
	{
		$this->add($dataName, $data);
	}


	/**
	 * Leitet den Zugriff auf {get()} weiter
	 * return Object|NULL
	 * */
	public function __get ($dataName)
	{
		return $this->get($dataName);
	}


	/**
	 * Erstellt eine Referenz auf die Daten
	 * @param string $dataName : Name, ueber welchen die Daten angesprochen werden sollen
	 * @param mixed &$data	: Daten, auf welche referenziert werden soll
	 * 						 class, object, var, ...
	 * @return bool
	 * */
    public function add ($dataName, $data)
	{
	    return $this->arrVar[$dataName] = $data;
	}


	/**
	 * Greift auf den Datensatz zu
	 * @param string $dataName : Name des Datensatzes
	 * */
	public function get ($dataName)
	{
		if ($this->exists($dataName)) {
			return $this->arrVar[$dataName];
		}

		return NULL;
	}


	/**
	 * Liefert die Namen aller registrierten Objekte
	 * @return Array[String]
	 * */
	public function getList ()
	{
	    $arrResult = array();
	    if (count($this->arrVar) >= 1) {
	        while(list($key) = each($this->arrVar)) {
    			$arrResult[] = $key;
	        }
	        reset($this->arrVar);
	    }

		return $arrResult;
	}


	/**
	 * Entfertn hinzugefuegte Daten
	 * @param string $dataName : Name des Datensatzes
	 * @return bool
	 * */
	public function delete ($dataName)
	{
		if ($this->exists($dataName)) {
			unset($this->arrVar[$dataName]);
			return true;
		}

		return false;
	}

	/**
	 * Prueft ob ein bestimmter Datensatz existiert
	 * @param string $dataName : Name des Datensatzes
	 * @return bool
	 * */
	public function exists ($dataName)
	{
		if (isset($this->arrVar[$dataName])) {
			return true;
		}

		return false;
	}

	/**
	 * Ermittelt den Datentyp des Datensatzes
	 * @param string $dataName : Name des Datensatzes
	 * @return string|NULL
	 * */
	public function getType ($dataName)
	{
		if ($this->exists($dataName)) {
			return gettype($this->arrVar[$dataName]);
		}

		return NULL;
	}


	/**
	 * Liefert Debug-Informationen
	 * @return string
	 * */
	public function getDebugInfo ()
	{
	    $result = '';

	    // Alle in Variable vorhandenen Variablennamen ausgeben
	    $arrVar = $this->getList();
	    if (count($arrVar)) {
	        while(list($key, $val) = each($arrVar)) {
        	    $result .= '<pre>';
        	    $result .= print_r($this->arrVar[$val], true);
        	    $result .= '</pre>';
	        }
	    }

	    return '<div class="debug">'.$result.'</div>';
	}

}

?>